/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author guillem.caceres
 */
public class Nodo {

    private char c;
    private int n;
    private Trie t;
    public static final int FINAL_PALABRA = 123; // el caracter posterior a 'z';

    /**
     * Constructora de Nodo normal. Nodo usado para el diccionario y para reglas en alpha
     * y beta (excepto los finales de palabra de estos dos).
     */
    public Nodo(){
        c = 0;
    }


    /**
     * Constructora de Nodo para los finales de palabra de Beta.
     * @param n - int
     */
    public Nodo(int n){
        c = 0;
        this.n = n;
    }


    /**
     * Constructora de Nodo para los finales de palabra de Alpha.
     * @param t - Trie
     */
    public Nodo(Trie t){
        c = 0;
        this.t = t;
    }


    /**
     * Devuelve el caracter del nodo.
     * @return this.c - char
     */
    public char GetCaracter(){
        return this.c;
    }


    /**
     * El caracter del nodo toma el valor del caracter que s epasa como parametro.
     * @param c - char
     */
    public void SetCaracter(char c){
        this.c = c;
    }


    /**
     * El caracter del nodo toma el valor de FINAL_PALABRA(123).
     */
    public void SetFinal(){
        this.c = FINAL_PALABRA;
    }


    /**
     * El caracter del nodo toma el valor zero (0).
     */
    public void SetZero(){
        this.c = 0;
    }


    /**
     * Indica si el nodo marca final de palabra o no.
     * @return estado - boolean
     */
    public boolean EsFinPalabra(){
        if (c == FINAL_PALABRA) return true;
        return false;
    }


    /**
     * Devuelve el contador de veces que se accede a la regla del trie Beta.
     * @return this.n - int
     */
    public int GetProb(){
        return this.n;
    }


    /**
     * Incrementa el contador del ultimo nodo de la palabra de Beta en uno.
     *
     */
    public void IncProb(int cont){
        n += cont;
    }

    
    /**
     * Devuelve el Trie de beta relacionado con una palabra de alpha.
     * @return this.t - Trie
     */
    public Trie GetTrieBeta(){
        if (this.t == null) return new Trie(new Nodo());
        return this.t;
    }

    public void copiarNodo (Nodo nodo){
        nodo.c = this.c;
        nodo.n = this.n;
        nodo.t = this.t;
    }

}
